<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>10-复习definePropertes的使用</title>
</head>
<body>
  <script>
    // Object.defineProperties()  Object.defineProperty() 
    // Object.defineProperties() 可以对对象的多个属性做限定 
    const obj = {
      name: 'jack'
    }

    let result = '13012345678';
    // Object.defineProperties(obj,配置项)
    Object.defineProperties(obj, {
      age: {
        // 在这个对象当中可以对前面的属性名做进一步的约束
        value: 22, // 如果要设置值的话，需要写在value中
        writable: true, // 是否可以被修改 默认是false  true表示可以被修改
        configurable: true, // 当前属性是否可以被删除 默认是false 当为true时表示可以删除
        enumerable:true, // 默认值为false 表示不可迭代 迭代就是遍历 当为true时表示可以详情页
      },
      address: {
        value: '深圳市',
        enumerable:true
      },
      phone:{
        get(){
          console.log('只要访问当前的属性就会执行get中的代码')
          return result;
        },
        set(val){
          console.log('只要一赋值就会执行set中的代码...',val)
          result = val
        }
      }
    })

    // delete obj.name
    // delete obj.age
    // obj.age = 32

    console.log(obj)
    for (let key in obj) {
      console.log(key + '====' + obj[key])
    }
    console.log(obj.phone)
    obj.phone = 123
  </script>
</body>
</html>